Skip to content

Common Translations update from Hosted Weblate - #691

Merged
krokosik merged 1 commit into
oss-apps:mainfrom
weblate:weblate-splitpro-common
Aug 1, 2026
Merged

Common Translations update from Hosted Weblate#691
krokosik merged 1 commit into
oss-apps:mainfrom
weblate:weblate-splitpro-common

Conversation

@weblate

@weblate weblate commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Translations update from Hosted Weblate for SplitPro/Common.

Current translation status:

Weblate translation status

Summary by CodeRabbit

  • New Features
    • Added Indonesian translations across major app areas, including accounts, expenses, groups, banking, and navigation.
    • Added Hebrew translations for account, profile, notifications, imports, and feedback-related content.
  • Localization
    • Updated Portuguese (Portugal) translations with improved wording and additional transaction and balance-related labels.
    • Added Catalan and Catalan Valencian locale files.

@weblate
weblate force-pushed the weblate-splitpro-common branch 3 times, most recently from 1ba320d to 16f78c8 Compare July 4, 2026 01:07
@weblate
weblate force-pushed the weblate-splitpro-common branch 2 times, most recently from a9bc4cb to 471602b Compare July 21, 2026 04:01
@weblate
weblate force-pushed the weblate-splitpro-common branch from 471602b to 45aa612 Compare August 1, 2026 11:56
@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@weblate, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 19 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d19806a4-908f-40a3-b14b-af28afc0c665

📥 Commits

Reviewing files that changed from the base of the PR and between 45aa612 and 974698f.

📒 Files selected for processing (5)
  • public/locales/ca/common.json
  • public/locales/ca@valencia/common.json
  • public/locales/he/common.json
  • public/locales/id/common.json
  • public/locales/pt-PT/common.json
📝 Walkthrough

Walkthrough

The change updates shared locale content for Catalan, Catalan Valencian, Hebrew, Indonesian, and Portuguese. It adds translations, fills empty entries, revises messages, and adds interpolation placeholders.

Changes

Locale translation updates

Layer / File(s) Summary
Catalan locale entries
public/locales/ca/common.json, public/locales/ca@valencia/common.json
The Catalan locale is empty, and the Catalan Valencian locale now contains an empty translation object.
Hebrew translations
public/locales/he/common.json
Hebrew translations cover language selection, account settings, notifications, app downloads, imports, logout, feedback, and related labels.
Indonesian locale
public/locales/id/common.json
The complete Indonesian locale includes nested messages, validation text, navigation labels, and interpolated values.
Portuguese translation updates
public/locales/pt-PT/common.json
Portuguese translations cover account settings, balances, groups, transactions, errors, invitations, and recurring expenses. Existing messages and placeholders are also revised.

Estimated code review effort: 2 (Simple) | ~15 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the translation update from Hosted Weblate, which matches the main changes.
Description check ✅ Passed The description summarizes the Weblate translation update and identifies the project, but it omits the template headings and checklist.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@public/locales/he/common.json`:
- Around line 26-30: Remove the empty Hebrew translation entries under the
visible translation section, including using_android, using_ios, video, and
download_splitpro_data, so next-i18next can use fallback text instead of
retaining blank labels.

In `@public/locales/id/common.json`:
- Line 43: Correct the value of the "zoom" translation key in common.json from
the misspelled "Zom" to "Zoom" or the approved Indonesian localization term.
- Around line 1-3: Add the Indonesian locale identifier "id" to the i18n.locales
configuration in next-i18next.config.js and to the supported-language list in
src/utils/i18n/client.ts, preserving the existing locale entries and ordering
conventions.
- Line 346: Update the in_splitpro translation value from “di Splitpro” to “di
SplitPro” in the common locale, preserving the established SplitPro brand
casing.

In `@public/locales/pt-PT/common.json`:
- Line 321: Update the default_balance_currency_cleared translation to use PT-PT
wording for a removed currency, replacing “zerada” with “removida” or
“eliminada”.
- Line 289: Update the “cant_delete” translation in the Portuguese locale to
replace the grammatically incorrect “todos acerte” wording with a clear passive
construction, preserving the warning’s existing meaning.
- Around line 163-164: Update the image_compression_failed translation to use
“Tente enviar” instead of “Tentar a enviar”, and correct “Error” to “Erro” in
import_failed while preserving the rest of each Portuguese message.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: aec2457f-c8a4-4ca9-baec-d852dd9ab17e

📥 Commits

Reviewing files that changed from the base of the PR and between 6f9e4cb and 45aa612.

📒 Files selected for processing (5)
  • public/locales/ca/common.json
  • public/locales/ca@valencia/common.json
  • public/locales/he/common.json
  • public/locales/id/common.json
  • public/locales/pt-PT/common.json

Comment on lines 26 to 30
"using_android": "",
"using_ios": "",
"video": ""
},
"download_splitpro_data": "",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
rg -n -C 5 'returnEmptyString|fallbackLng|fallbackLocale|i18next|next-intl|public/locales|common\.json' .

Repository: oss-apps/split-pro

Length of output: 43526


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- next-i18next.config.js ---'
cat -n next-i18next.config.js

printf '%s\n' '--- i18n helpers ---'
cat -n src/utils/i18n/server.ts
cat -n src/utils/i18n/client.ts

printf '%s\n' '--- locale files and target keys ---'
git ls-files 'public/locales/*/common.json' | sort
python3 - <<'PY'
import json
from pathlib import Path

keys = [
    ("download_splitpro_data",),
    ("download_splitpro_data", "using_android"),
    ("download_splitpro_data", "using_ios"),
    ("download_splitpro_data", "video"),
]
for path in sorted(Path("public/locales").glob("*/common.json")):
    try:
        data = json.loads(path.read_text())
    except Exception as exc:
        print(path, "INVALID_JSON", exc)
        continue
    node = data
    values = []
    for keypath in keys:
        node = data
        for key in keypath:
            node = node.get(key) if isinstance(node, dict) else None
        values.append(( ".".join(keypath), node, type(node).__name__))
    print(path, values)
PY

printf '%s\n' '--- translation configuration options ---'
rg -n -C 8 'i18n\.init|initReactI18next|returnEmptyString|fallbackNS|fallbackLng|defaultNS|ns:' src next-i18next.config.js next.config.js package.json

Repository: oss-apps/split-pro

Length of output: 50374


🌐 Web query:

i18next returnEmptyString default fallback behavior official documentation

💡 Result:

In i18next, the returnEmptyString configuration option controls whether an empty string is treated as a valid translation result [1][2]. The default value for returnEmptyString is true [1][3][2]. When set to true (default), i18next accepts an empty string ("") as a valid translation, and it will be returned as the translation value [1][2]. If you want to prevent empty strings from being returned and instead trigger a fallback (for example, to a fallback language or the key itself), you should set returnEmptyString to false [4][5][6]. When this option is false, i18next treats an empty string as if the key were missing, causing the translation process to continue searching through fallback options [4][5].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- Hebrew target region ---'
sed -n '1,85p' public/locales/he/common.json

printf '%s\n' '--- English matching region ---'
sed -n '1,85p' public/locales/en/common.json

printf '%s\n' '--- all references to the namespace/key ---'
rg -n -C 4 'download_splitpro_data|using_android|using_ios' src public/locales

printf '%s\n' '--- locale enablement and translation wrappers ---'
rg -n -C 4 "['\"]he['\"]|supportedLanguages|getSupportedLanguages|customServerSideTranslations|serverSideTranslations|useTranslation" src next-i18next.config.js next.config.js --glob '!**/*.map'

Repository: oss-apps/split-pro

Length of output: 50375


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json
from pathlib import Path

def lookup(obj, path):
    for part in path.split("."):
        if not isinstance(obj, dict) or part not in obj:
            return "<missing>"
        obj = obj[part]
    return obj

paths = [
    "download_splitpro_data.using_android",
    "download_splitpro_data.using_ios",
    "download_splitpro_data.video",
    "download_splitpro_data",
]
for locale in ("he", "en", "default"):
    path = Path("public/locales") / locale / "common.json"
    if not path.exists():
        print(locale, "<file missing>")
        continue
    data = json.loads(path.read_text())
    print(locale, {key: lookup(data, key) for key in paths})
PY

Repository: oss-apps/split-pro

Length of output: 559


🌐 Web query:

next-i18next default configuration returnEmptyString i18next options

💡 Result:

The returnEmptyString option is an i18next configuration setting that controls whether an empty string is treated as a valid translation result [1][2]. By default, it is set to true [1][2]. When set to false, i18next treats empty strings as missing translations, which triggers fallback mechanisms (such as falling back to a different language or returning the translation key) [3]. Because next-i18next is built on top of i18next, you can pass this option through to the underlying i18next instance. In your next-i18next configuration file (e.g., next-i18next.config.js), you should include it within the i18nextOptions object rather than at the root level of the configuration [4][5]. Placing it at the root level may cause warnings in some environments because next-i18next expects specific configuration keys [6]. Example usage: // next-i18next.config.js module.exports = { i18n: { defaultLocale: 'en', locales: ['en', 'de'], }, i18nextOptions: { returnEmptyString: false, // Set to false to treat empty strings as invalid }, //... other next-i18next specific options }; You can find comprehensive details on this and other i18next-specific settings in the official i18next configuration documentation [1].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json
from pathlib import Path

targets = {
    "account.download_app_details.using_android",
    "account.download_app_details.using_ios",
    "account.download_app_details.video",
    "account.download_splitpro_data",
}

def lookup(data, dotted):
    value = data
    for part in dotted.split("."):
        if not isinstance(value, dict) or part not in value:
            return ("missing", None)
        value = value[part]
    return ("present", value)

he = json.loads(Path("public/locales/he/common.json").read_text())
en = json.loads(Path("public/locales/en/common.json").read_text())
config = Path("next-i18next.config.js").read_text()

print("next-i18next config overrides returnEmptyString=false:",
      "returnEmptyString: false" in config or "returnEmptyString:false" in config)
print("Hebrew declared in next-i18next.config.js:", "'he'" in config or '"he"' in config)

for key in sorted(targets):
    h_state, h_value = lookup(he, key)
    e_state, e_value = lookup(en, key)
    print(f"{key}: he={h_state}:{h_value!r}; en={e_state}:{e_value!r}")
    if h_state == "present" and h_value == "":
        print(f"  i18next default outcome: empty string is retained unless returnEmptyString=false")
PY

if node -e "require.resolve('i18next')" >/dev/null 2>&1; then
  node - <<'JS'
  const i18next = require('i18next');
  const instance = i18next.createInstance();
  instance.init({
    lng: 'he',
    fallbackLng: 'en',
    resources: {
      he: { common: { sample: '' } },
      en: { common: { sample: 'English fallback' } },
    },
    ns: ['common'],
    defaultNS: 'common',
  }).then(() => {
    console.log('runtime default:', JSON.stringify(instance.t('sample')));
    return instance.init({ returnEmptyString: false });
  }).then(() => {
    console.log('runtime returnEmptyString=false:', JSON.stringify(instance.t('sample')));
  });
  JS
else
  echo "i18next runtime unavailable; no dependency execution performed"
fi

Repository: oss-apps/split-pro

Length of output: 1107


Omit the empty Hebrew translations. When Hebrew is enabled, next-i18next retains "" by default and renders blank labels instead of fallback text. Hebrew is not currently listed in next-i18next.config.js.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@public/locales/he/common.json` around lines 26 - 30, Remove the empty Hebrew
translation entries under the visible translation section, including
using_android, using_ios, video, and download_splitpro_data, so next-i18next can
use fallback text instead of retaining blank labels.

Comment on lines +1 to +3
{
"account": {
"change_language": "Ubah bahasa",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Register the id locale in both i18n registries.

next-i18next.config.js does not include id in i18n.locales, and src/utils/i18n/client.ts does not include id in its supported-language list. Add id to both locations. Otherwise, this translation file will not load or be selectable.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@public/locales/id/common.json` around lines 1 - 3, Add the Indonesian locale
identifier "id" to the i18n.locales configuration in next-i18next.config.js and
to the supported-language list in src/utils/i18n/client.ts, preserving the
existing locale entries and ordering conventions.

"remove_avatar": "Hapus avatar",
"select_avatar": "Pilih gambar",
"title": "Edit detail",
"zoom": "Zom"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Fix the typo in the zoom label.

Replace "Zom" with "Zoom" or the approved Indonesian term.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@public/locales/id/common.json` at line 43, Correct the value of the "zoom"
translation key in common.json from the misspelled "Zom" to "Zoom" or the
approved Indonesian localization term.

"title": "Saldo tertunggak kelompok"
},
"invite_message": {
"in_splitpro": "di Splitpro",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve the SplitPro brand casing.

Change "di Splitpro" to "di SplitPro" to match the product name used elsewhere in this file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@public/locales/id/common.json` at line 346, Update the in_splitpro
translation value from “di Splitpro” to “di SplitPro” in the common locale,
preserving the established SplitPro brand casing.

Comment thread public/locales/pt-PT/common.json
Comment thread public/locales/pt-PT/common.json
},
"messages": {
"balances_recalculated": "Saldos recalculados com sucesso",
"default_balance_currency_cleared": "Moeda de saldo padrão zerada",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use PT-PT wording for a cleared default currency.

zerada means “zeroed” and is not appropriate for removing a selected currency. Use removida or eliminada.

Proposed fix
-      "default_balance_currency_cleared": "Moeda de saldo padrão zerada",
+      "default_balance_currency_cleared": "Moeda de saldo padrão removida",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"default_balance_currency_cleared": "Moeda de saldo padrão zerada",
"default_balance_currency_cleared": "Moeda de saldo padrão removida",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@public/locales/pt-PT/common.json` at line 321, Update the
default_balance_currency_cleared translation to use PT-PT wording for a removed
currency, replacing “zerada” with “removida” or “eliminada”.

@weblate
weblate force-pushed the weblate-splitpro-common branch 3 times, most recently from ea55f88 to bb8b19b Compare August 1, 2026 12:36
Currently translated at 100.0% (325 of 325 strings)

Added translation using Weblate (Indonesian)

Added translation using Weblate (Catalan)

Added translation using Weblate (Valencian)

Translated using Weblate (Portuguese (Portugal))

Currently translated at 100.0% (325 of 325 strings)

Translated using Weblate (Hebrew)

Currently translated at 7.0% (23 of 325 strings)

Co-authored-by: Akiva Goldman <akivazev@protonmail.com>
Co-authored-by: Arif Budiman <arifpedia@gmail.com>
Co-authored-by: Guillem Usach <guillem.usach@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/splitpro/common/he/
Translate-URL: https://hosted.weblate.org/projects/splitpro/common/id/
Translate-URL: https://hosted.weblate.org/projects/splitpro/common/pt_PT/
Translation: SplitPro/Common
@weblate
weblate force-pushed the weblate-splitpro-common branch from bb8b19b to 974698f Compare August 1, 2026 12:36
@krokosik
krokosik merged commit a3b4dc8 into oss-apps:main Aug 1, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants